package net.openvision.music.composition.rules;

import java.util.Collection;

import net.openvision.music.composition.Element;
import net.openvision.music.composition.MultiSequence;

/**
 * A rule to enumerate possibilities to complete elements in a multi sequence
 * that are incomplete. An incomplete element is an element that contains
 * undefined values. Hence this rule allows constraining of elements in a multi
 * sequence.
 * 
 * @author Hannes Widmoser
 * 
 */
public interface ConstructionRule {
	/**
	 * Enumerates all possible complete elements that are possible complete
	 * extensions to the given element according to this rule. This method
	 * ensures that all values in the affected element that are defined remain
	 * unchanged.
	 * 
	 * @param e
	 *            the uncomplete element
	 * @return a collection of complete elements
	 */
	public Collection<Element> complete(Element e);
}
